package org.x.user.controller;

import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.x.common.config.Result;
import org.x.common.enums.LogAsync;
import org.x.user.dto.LogArchiveDTO;
import org.x.user.dto.LogQueryDTO;
import org.x.user.service.ISysLogService;

import java.io.IOException;


/**
 * 操作日志表 控制层。
 *
 * @author mybatis-flex-helper automatic generation
 * @since 1.0
 */
@RestController
@RequestMapping("/api/log")
public class SysLogController {

    @Autowired
    private ISysLogService sysLogService;

    /*功能清单
            功能点	            请求类型	       接口URL	                       功能说明
            操作日志记录  	自动	N/A	                                   系统自动记录关键操作日志
            日志分页查询	    GET	             /api/log/list	            多条件分页查询操作日志
            日志详情查询	    GET	            /api/log/detail/	        获取日志详细信息及变更详情
            日志归档管理	    POST	        /api/log/archive	        归档过期日志到历史表
            日志导出	        GET	            /api/log/export	             导出日志数据为Excel文件
            日志统计报表	    GET	            /api/log/statistics	        获取操作日志统计报表
    * */
//    /*** 添加 操作日志表*/
//    @PostMapping("/save")
//    public boolean save(@RequestBody SysLogEntity sysLog) {
//        return sysLogService.save(sysLog);
//    }


    /*** 分页查询操作日志表**/
    @LogAsync("日志分页查询操作")
    @GetMapping("/list")
    public Result page(@ModelAttribute LogQueryDTO logQueryDTO) {
        return Result.ok(sysLogService.page(logQueryDTO));
    }

    //日志详情查询
    @LogAsync("日志详情查询")
    @GetMapping("/detail/{id}")
    public Result detailLog(@PathVariable Long id) {
        return Result.ok( sysLogService.getByIddetail(id));
    }

    //日志归档管理
    @LogAsync("日志归档管理")
    @PostMapping("/archive")
    public Result archiveLog(@RequestBody LogArchiveDTO archiveDTO) {
        if (archiveDTO.getRetainDays() == null) {
            return Result.error(500, "保留天数不能为空");
        }
        return Result.ok(sysLogService.archiveLog(archiveDTO));
    }

    //日志导出
    @LogAsync("日志导出")
    @GetMapping("/export")
    public void exportLog(@RequestParam(required = false) String startTime,
                          @RequestParam(required = false) String endTime) throws IOException {
        sysLogService.download(startTime, endTime);
    }

    //日志统计报表
    @LogAsync("日志统计报表")
    @GetMapping("/statistics")
    public Result statisticsLog(@RequestParam(required = false, defaultValue = "month") String timeRange,
                                @RequestParam(required = false) String startTime,
                                @RequestParam(required = false) String endTime) {
        return Result.ok(sysLogService.statistics(timeRange, startTime, endTime));
    }
}